package relation;

import java.io.*;

/**
 * 单例模式，用于获取唯一性id，以区分生成的临时表
 * @author cgl-22341129
 */
public class UniqueID {
    static private int id;


    static private final UniqueID tempid=new UniqueID();

    private UniqueID(){
        id=0;
    }
    public static int getId() {
        return id++;
    }
    private static int bytesToInt(byte[] a){
        int ans=0;
        for(int i=0;i<4;i++){
            ans<<=8;//左移 8 位
            ans|=a[3-i];//保存 byte 值到 ans 的最低 8 位上
        }
        return ans;
    }
    public static byte[] intToBytes(int a){
        byte[] ans=new byte[4];
        for(int i=0;i<4;i++)
            ans[i]=(byte)(a>>(i*8));//截断 int 的低 8 位为一个字节 byte，并存储起来
        return ans;
    }

    public static int getUniqueID() throws IOException {

        File file=new File("src/data/Count");

        InputStream in = new FileInputStream(file);
        byte[] value=new byte[4];
        in.read(value);
        in.close();
        int UniqueID=bytesToInt(value);
        UniqueID++;
        value = intToBytes(UniqueID);
        OutputStream out=new FileOutputStream(file);
        out.write(value);
        out.close();

        return UniqueID;
    }

    /**
     * 设置储存在文件中的UniqueID
     * @param ID 新的ID起点，后续获得的ID为这个值不断加1
     */
    public static void setUniqueID(int ID) throws IOException {
        File file=new File("src/data/Count");
        OutputStream out=new FileOutputStream(file);
        out.write(intToBytes(ID));
        out.close();

    }

}
